package semantico;

import simbolos.Tipo;
import lexico.Token;

/**
 * Implementa os operadores logicos '<', '<=', '==', '!=', '>=' e '>'
 * @author Cefanys
 *
 */
public class ExpressaoLogica extends OperadorLogico{

	public ExpressaoLogica(Token token, Expressao expressao1, Expressao expressao2) throws SemanticoException{
		super(token, expressao1, expressao2);
	}
	
	/**
	 * Verifica se os dois operandos sao do tipo logico
	 */
	public Tipo tipoExpressao(Tipo op1, Tipo op2){
		if(op1 == op2){
			return Tipo.LOGICO;
		}else{
			return null;
		}
	}
	
	/**
	 * Gera codigo de tres enderecos para as subexpressoes expressao1 e expressao2
	 */
	public void desviar(int saidaVerdadeira, int saidaFalsa) throws SemanticoException{
		Expressao a = expressao1.gerarConstante();
		Expressao b = expressao2.gerarConstante();
		String expressaoLogica = a.toString() + " " + operador.toString() + " " + b.toString();
		emitirDesvio(expressaoLogica, saidaVerdadeira, saidaFalsa);
	}
}
